package it.polimi.traveldream.persistence;

import java.io.Serializable;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

import java.util.LinkedList;
import java.util.List;


/**
 * The persistent class for the hotel database table.
 * 
 */
@Entity
@NamedQuery(name="Hotel.findAll", query="SELECT h FROM Hotel h")
public class Hotel implements Serializable {
	private static final long serialVersionUID = 1L;

	public static final String FIND_ALL = "Hotel.findAll";

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int IDHotel;
	
	@NotNull
	private String nome;

	@NotNull
	private int numeroCivico;

	@NotNull
	private String via;

	//bi-directional many-to-one association to Localita
	@ManyToOne
	@JoinColumn(name="IDLocalita")
	private Localita localita;

	//bi-directional many-to-one association to PrenotazioneHotel
	@OneToMany(mappedBy="hotel", cascade=CascadeType.ALL)
	private List<PrenotazioneHotel> prenotazioniHotel = new LinkedList<PrenotazioneHotel>();

	//bi-directional many-to-one association to Utente
	@ManyToOne
	@JoinColumn(name="EmailImpiegato")
	private Utente utente;

	//bi-directional many-to-one association to PonteHotelPacchetto
	@OneToMany(mappedBy="hotel", cascade=CascadeType.ALL)
	private List<PonteHotelPacchetto> ponteHotelPacchettos = new LinkedList<PonteHotelPacchetto>();

	public Hotel() {
	}

	public int getIDHotel() {
		return this.IDHotel;
	}

	public void setIDHotel(int IDHotel) {
		this.IDHotel = IDHotel;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getNumeroCivico() {
		return this.numeroCivico;
	}

	public void setNumeroCivico(int numeroCivico) {
		this.numeroCivico = numeroCivico;
	}

	public String getVia() {
		return this.via;
	}

	public void setVia(String via) {
		this.via = via;
	}

	public Localita getLocalita() {
		return this.localita;
	}

	public void setLocalita(Localita localita) {
		this.localita = localita;
	}

	public List<PrenotazioneHotel> getPrenotazioniHotel() {
		return this.prenotazioniHotel;
	}

	public void setPrenotazioniHotel(List<PrenotazioneHotel> prenotazioneHotels) {
		this.prenotazioniHotel = prenotazioneHotels;
	}

	public PrenotazioneHotel addPrenotazioneHotel(PrenotazioneHotel prenotazioneHotel) {
		getPrenotazioniHotel().add(prenotazioneHotel);
		prenotazioneHotel.setHotel(this);

		return prenotazioneHotel;
	}

	public PrenotazioneHotel removePrenotazioneHotel(PrenotazioneHotel prenotazioneHotel) {
		getPrenotazioniHotel().remove(prenotazioneHotel);
		prenotazioneHotel.setHotel(null);

		return prenotazioneHotel;
	}

	public Utente getUtente() {
		return this.utente;
	}

	public void setUtente(Utente utente) {
		this.utente = utente;
	}

	public List<PonteHotelPacchetto> getPonteHotelPacchettos() {
		return this.ponteHotelPacchettos;
	}

	public void setPonteHotelPacchettos(List<PonteHotelPacchetto> ponteHotelPacchettos) {
		this.ponteHotelPacchettos = ponteHotelPacchettos;
	}

	public PonteHotelPacchetto addPonteHotelPacchetto(PonteHotelPacchetto ponteHotelPacchetto) {
		getPonteHotelPacchettos().add(ponteHotelPacchetto);
		ponteHotelPacchetto.setHotel(this);

		return ponteHotelPacchetto;
	}

	public PonteHotelPacchetto removePonteHotelPacchetto(PonteHotelPacchetto ponteHotelPacchetto) {
		getPonteHotelPacchettos().remove(ponteHotelPacchetto);
		ponteHotelPacchetto.setHotel(null);

		return ponteHotelPacchetto;
	}

}